﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////


#pragma once

#include "GcmpModelInterface.h"
#include "Coordinate3d.h"
#include "NdbObjectSchematic.h"
#include "DbDataSchema.h"

namespace gcmp
{
    class IElement;
    class IDocument;
    class IElementParentReporter;

    // 临时性接口，因GBMP实现剪切板时需要去掉所有的非接口调用而暴露，不确定最终是否暴露 
    class GCMP_MODEL_INTERFACE_EXPORT IEditModeCopyPasteComponent
    {
    public:
        /// \brief 析构函数
        virtual ~IEditModeCopyPasteComponent() {}

        /// \brief 获取对象对应的编辑模式信息
        /// \param pDocument 对象所在的文档
        /// \param elementIds 操作的对象集合
        /// \return 编辑模式信息字符串
        virtual std::wstring GetEditModeInfo(gcmp::IDocument* pDocument, std::vector<ElementId>& elementIds) const = 0;

        /// \brief 获取源文档编辑模式下的对象到当前编辑模式下对象的映射关系
        ///
        /// 当前编辑模式属于目标文档，复制操作会使用到
        /// \param pDocumentFrom 复制操作源文档
        /// \param pDocumentTo 复制操作目标文档
        /// \param sourceElementIds 源文档需要复制的对象
        /// \param oldToNewIdMap 源文档对象到目标文档对象的映射关系
        /// \return true-映射关系获取成功；false-映射关系获取失败
        virtual bool GetElementIdMap(
            gcmp::IDocument* pDocumentFrom,
            gcmp::IDocument* pDocumentTo,
            const std::vector<gcmp::ElementId>& sourceElementIds,
            std::map<ElementId, ElementId>& oldToNewIdMap) const = 0;
        
        /// \brief 获取编辑模式下的坐标系
        /// \param pDocument 编辑模式所在的文档
        /// \return 编辑模式下的坐标系
        virtual Coordinate3d GetCoordinate(gcmp::IDocument* pDocument) const = 0;
    };
}





